iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0

當 OpenShift 安裝在受限制的網絡上時,Operator Lifecycle Manager(OLM)不能再使用默認的 OperatorHub 來源,因為它們需要完全的Internet連接。系統管理員可以禁用這些默認 OperatorHub 來源並創建本地鏡像,以便 OLM 可以改為從本地來源安裝和管理Operator。

主要的概念如下:

  1. 拷貝目標 Operator 映像檔到本地映像倉庫,例如 Quay。
  2. 建立客製化 Operator Catalog 映像檔,並且 push 到本地映像倉庫,例如 Quay。
  3. 在 OpenShift 部署新的 CatalogSource 物件,將來源指向本地映像倉庫,例如 Quay。

我會使用 Grafana Operator 當範例,在受限制的網絡上部署 Grafana Operator 到我自己的專案空間。

步驟

  1. 禁用默認 OperatorHub 來源。
oc patch OperatorHub cluster --type json \
    -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
  1. 取得 package lists。
$ curl https://quay.io/cnr/api/v1/packages?namespace=community-operators | jq . > packages.txt
  1. 從 package lists 找到目標 Operator 名稱及支援的版本
{
    "channels": null,
    "created_at": "2019-07-26T13:43:46",
    "default": "3.5.0",
    "manifests": [
      "helm"
    ],
    "name": "community-operators/grafana-operator",
    "namespace": "community-operators",
    "releases": [
      "3.5.0",
      "2.0.0",
      "1.3.0"
    ],
    "updated_at": "2020-07-31T18:43:47",
    "visibility": "public"
  },
  1. 抓取目標 Operator 的 package 資訊
$ curl -k https://quay.io/cnr/api/v1/packages/community-operators/grafana-operator/3.5.0 | jq .  
[
  {
    "content": {
      "digest": "cc44387393bbb233201a5a02de7697b38cfaa5bb89fbdf22b6b0cd78be3e96ef",
      "mediaType": "application/vnd.cnr.package.helm.v0.tar+gzip",
      "size": 8630,
      "urls": []
    },
    "created_at": "2020-07-31T18:43:47",
    "digest": "sha256:0aaed6bdaa093c3eb58378d45ae72f2d332f4632681e59507b8639c29a371b4c",
    "mediaType": "application/vnd.cnr.package-manifest.helm.v0.json",
    "metadata": null,
    "package": "community-operators/grafana-operator",
    "release": "3.5.0"
  }
]
  1. 準備 "manifests" 資料夾
$ curl -k -XGET https://quay.io/cnr/api/v1/packages/community-operators/grafana-operator/blobs/sha256/cc44387393bbb233201a5a02de7697b38cfaa5bb89fbdf22b6b0cd78be3e96ef -o grafana-operator.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8630  100  8630    0     0  13782      0 --:--:-- --:--:-- --:--:-- 13808

$ tar -xf grafana-operator.tar.gz
$ mkdir -p manifests/grafana-operator
$ cp -r grafana-operator-njs08tsk/* manifests/grafana-operator/
  1. 在 Quay 建立 Mirror Repository 來下載 manifests 中的operator 映像檔到本地端。

  2. 修改 manifests 中映像檔位址並指導本地映像檔倉庫。

$ sed -i "s;quay.io/integreatly/grafana-operator:v3.5.0;quay-uat/mirrors/grafana-operator:v3.5.0;g" ./3.5.0/grafana-operator.v3.5.0.clusterserviceversion.yaml
$ sed -i "s;quay.io/integreatly/grafana-operator:v2.0.0;quay-uat/mirrors/grafana-operator:v2.0.0;g" ./2.0.0/grafana-operator.v2.0.0.clusterserviceversion.yaml
  1. 建立客製化 Operator Catalog 映像檔。

Dockerfile:

FROM registry.redhat.io/openshift4/ose-operator-registry:v4.2.24 AS builder

COPY manifests manifests

RUN /bin/initializer -o ./bundles.db

FROM registry.access.redhat.com/ubi7/ubi

COPY --from=builder /registry/bundles.db /bundles.db
COPY --from=builder /usr/bin/registry-server /registry-server
COPY --from=builder /bin/grpc_health_probe /bin/grpc_health_probe

EXPOSE 50051

ENTRYPOINT ["/registry-server"]

CMD ["--database", "bundles.db"]

透過 podman 指令建立映像檔並上傳到本地映像檔倉庫。

$ podman build -t quay-uat/applications/operator-catalog-registry:0.1.0 .
$ podman push quay-uat/applications/operator-catalog-registry:0.1.0
  1. 新建 CatalogSource YAML 檔案以指到本地 Operator Catalog 映像檔,然後部署到 OpenShift 上。
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: brandon-operator-catalog
  namespace: openshift-marketplace
spec:
  displayName: Brandon Operator Catalog
  sourceType: grpc
  image: quay-uat/applications/operator-catalog-registry:0.1.0
  1. 從 Web UI 確認 客製化的 OperatorHub 來源是否有出現。

https://ithelp.ithome.com.tw/upload/images/20201010/2013032131cxeniUR9.png

  1. 從 Web UI 安裝 Grafana Operator 。

https://ithelp.ithome.com.tw/upload/images/20201010/20130321i3rUMZ588h.png

https://ithelp.ithome.com.tw/upload/images/20201010/201303212mOMPLOshm.png

結論

上述步驟是參考 OpenShift 4.2 的官方文件, 在 OpenShift 4.5 的官方文件 又是不同的方法,真心覺得 OpenShift 的官方文件設計的很差,常常 Google 到舊版本的文件,喵的!

最後,國慶日快樂!


上一篇
在 OpenShift 使用整合的 Prometheus 跟 AlertManager 來監控部署的應用程序吧!
下一篇
利用 Grafana Operator 部署 Grafana 到 OpenShift,並建立客製化的 Dashboard。
系列文
『紅帽』的 Cloud-Native 工作術: 從 Container 到 OpenShift 。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言